Window Functions হল SQL-এ ব্যবহৃত বিশেষ ধরনের ফাংশন যা একটি "window" বা "ভিউ" এর মধ্যে ডেটা প্রসেস করতে সক্ষম। এই ফাংশনগুলি সাধারণত ROW_NUMBER(), RANK(), LEAD(), LAG() ইত্যাদি যেমন অ্যাগ্রিগেট ফাংশনগুলির সাথে ব্যবহৃত হয়, কিন্তু এটি গ্রুপিং না করে ডেটাকে উইন্ডো ভিত্তিতে পরিচালনা করতে দেয়।
Presto-তে Window Functions ব্যবহার করে আপনি একটি নির্দিষ্ট রেঞ্জের উপর ভিত্তি করে ডেটা বিশ্লেষণ করতে পারবেন, যেমন একটি নির্দিষ্ট সময়ের মধ্যে চলমান গড়, র্যাঙ্কিং, শীর্ষ এবং নিচের মান খুঁজে বের করা।
Window Functions সাধারণত দুটি প্রধান অংশে বিভক্ত:
ROW_NUMBER()
, RANK()
, LEAD()
, ইত্যাদি)।SELECT column1, column2, window_function() OVER (PARTITION BY column1 ORDER BY column2)
FROM table_name;
এখানে:
window_function()
হল ব্যবহার করা উইন্ডো ফাংশন, যেমন ROW_NUMBER()
, RANK()
, LEAD()
, ইত্যাদি।PARTITION BY
হল ডেটাকে কীভাবে বিভক্ত করা হবে তা নির্দেশ করে।ORDER BY
হল সেই ক্রমে ডেটাকে সাজানোর জন্য নির্দেশনা দেয়, যার ওপর ভিত্তি করে উইন্ডো ফাংশন কাজ করবে।১. ROW_NUMBER()ROW_NUMBER()
ফাংশন প্রতিটি রেকর্ডকে একটি অনন্য রাঙ্ক প্রদান করে, যা তার অবস্থান অনুযায়ী সাজানো হয়।
SELECT customer_id, order_date, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_rank
FROM orders;
এখানে:
PARTITION BY customer_id
: প্রতিটি গ্রাহকের জন্য আলাদা আলাদা উইন্ডো তৈরি করা হচ্ছে।ORDER BY order_date
: অর্ডার তারিখ অনুযায়ী রেকর্ড সাজানো হচ্ছে।ফলাফল:
২. RANK()RANK()
ফাংশন প্রতিটি রেকর্ডকে একটি র্যাঙ্ক প্রদান করে, তবে একাধিক সমান মান থাকলে তারা একই র্যাঙ্ক পায়, এবং পরবর্তী র্যাঙ্কটি লাফ দিয়ে চলে যায়।
SELECT customer_id, order_date, amount, RANK() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rank
FROM orders;
এখানে:
RANK()
ফাংশনটি প্রতিটি গ্রাহকের জন্য অর্ডারের পরিমাণ অনুযায়ী র্যাঙ্ক প্রদান করবে, এবং যদি কোনো দুটি অর্ডারের পরিমাণ সমান থাকে, তাহলে তারা একই র্যাঙ্ক পাবে।ফলাফল:
৩. LEAD() এবং LAG()LEAD()
এবং LAG()
ফাংশন দুটি ব্যবহার করা হয় পেছনের বা পরের রেকর্ডের মান দেখতে।
LEAD() উদাহরণ:
SELECT customer_id, order_date, amount, LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS next_order_amount
FROM orders;
এখানে:
LEAD(amount)
পরবর্তী অর্ডারের পরিমাণ দেখাবে।LAG() উদাহরণ:
SELECT customer_id, order_date, amount, LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS previous_order_amount
FROM orders;
এখানে:
LAG(amount)
পূর্ববর্তী অর্ডারের পরিমাণ দেখাবে।ফলাফল:
LEAD()
এবং LAG()
ব্যবহার করে আপনি প্রতিটি রেকর্ডের পরবর্তী বা পূর্ববর্তী মান দেখতে পারবেন, যা সময়ভিত্তিক বা ধারাবাহিক বিশ্লেষণের জন্য দরকারী।SUM() এবং AVG() ফাংশনও উইন্ডো ফাংশন হিসেবে ব্যবহৃত হতে পারে, যেখানে একটি নির্দিষ্ট উইন্ডোর মধ্যে মোট বা গড় মান বের করা হয়।
SUM() উদাহরণ:
SELECT customer_id, order_date, amount, SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum
FROM orders;
এখানে:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
নির্দেশ করে যে উইন্ডোটি বর্তমান রেকর্ড এবং এর পূর্ববর্তী সমস্ত রেকর্ডের মধ্যে থাকতে হবে।SUM(amount)
এর মাধ্যমে গ্রাহকের জন্য মোট অর্ডার পরিমাণ বের করা হচ্ছে।AVG() উদাহরণ:
SELECT customer_id, order_date, amount, AVG(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS moving_average
FROM orders;
এখানে:
AVG(amount)
গ্রাহকের জন্য চলমান গড় হিসাব করবে।Presto-তে Window Functions অত্যন্ত শক্তিশালী টুল, যা SQL কোয়েরি লেখার সময় উন্নত বিশ্লেষণ করতে সহায়ক। এগুলি আপনাকে গ্রুপিং ছাড়াই চলমান গড়, র্যাঙ্কিং, এবং অতিরিক্ত ডেটা বিশ্লেষণ করতে সক্ষম করে, যা ডেটা সায়েন্স এবং ব্যবসায়িক বিশ্লেষণের জন্য খুবই উপকারী।